// Variables globales

var xml; 
var selectedPedido;
var selectedDetalle;

/* Funciones correspondientes a la gestión de Pedidos a clientes */

function goBuscar() {
	$.mobile.changePage('#buscar_pedidos', {
		transition : "slide"
	});
}

function goCrear() {
	var fullDate = new Date()
	var twoDigitMonth = ((fullDate.getMonth().length+1) === 1)? (fullDate.getMonth()+1) : '0' + (fullDate.getMonth()+1);
	var currentDate = fullDate.getDate() + "-" + twoDigitMonth + "-" + fullDate.getFullYear();
	$('#c_fechaPedido').val(currentDate);
	$.mobile.changePage('#crear_pedido', {transition : "slide"});
}

function mostrarAnadirPedido() {
	$('#anadir_pedido').popup('open').trigger('create');	
}

// Validad pedido

function validarPedido(){
	var idCliente = $('#c_idClientePedido').val();
	var idEstado = $('#c_idEstado').val();
	var fecha = $('#c_fechaPedido').val();
	if(idCliente == 0 || idEstado == 0 || fecha == ''){
		$('#dlg_aviso_crear_pedido').popup('open').trigger('create');
	} else {
		grabarPedido();
	}
}

// Buscar pedidos

function buscar_pedido(destino, transicion) {
	var serviceURL = 'http://10.0.2.2:8080/Phama/pharmaws';
	$.mobile.showPageLoadingMsg(); 
	$.soap({
	    url: serviceURL,
	    appendMethodToURL: false, 
	    method: 'buscarPedidos',
	    namespaceQualifier: 'ns2',
	    namespaceUrl: 'http://ws.phama.it.eps.upo.org/',
	    params: {
	        id:  $('#b_idPedido').val(),
	        cliente: $('#b_idClientePedido').val(),
	        fecha: ''
	    },

	    success: function (soapResponse) {
	    	var xmlDoc = $.parseXML(soapResponse);
	        xml = $(xmlDoc);
	        $.mobile.hidePageLoadingMsg();
	        
	        var pedidos = xml.find("return");
	        if(pedidos.length>0){
	        	var lista = "<ul data-role='listview' data-inset='true'>";
	        	$("#resultadoPedidos").children().remove();
	        	$('#resultado_buscar_pedido').addClass('ui-page');
	    	    var ped = '';
	    	    pedidos.each(function(index,element){
	    	    	 idPedido = $(element).find('idPedidoCli').first().text();
	    	    	 ped = "<li><a href='#' onclick=\"accionPedido("+idPedido+")\">" +
	    	    	 		"N&uacute;m. " + $(element).find('idPedidoCli').first().text() +
	    	    	 		' : ' +
	    	    	 		$(element).find('cliente').find('nombre').text() + 
	    	    	 		"</a></li>";
	    	    	 lista += ped;
	    	    });
	    	    lista += "</ul>";
	    	    $('#resultadoPedidos').empty().append(lista).listview().trigger('create');
	    	    /* La página de destino y la forma de transición vienen dados por los parámetros de la función. De
	    	     * esta forma, la misma puede llamarse desde diferentes puntos del código. 
	    	     * Por otra parte, si el destino final de la acción es la página que muestra un pedido concreto (el
	    	     * seleccionado en ese momento, que está referenciado por su número a través de la variable global
	    	     * selectedPedido), se procede a refrescar el contenido de la lista de artículos de ese pedido. Esto 
	    	     * es así cuando se invoca la búsqueda después de haber insertado un nuevo artículo o eliminado uno
	    	     * existente. */
	    	    if(destino=='#ver_pedido'){	    	    	
	    	        refrescarDetalle();
	    	    }
	    	    $.mobile.changePage(destino, {transition : transicion}); 
	        } else {
	        	$('#dlg_aviso_buscar_pedido h1').html('Aviso');
	        	$('#dlg_aviso_buscar_pedido p').html('No se han encontrado resultados.');
	        	$('#dlg_aviso_buscar_pedido').popup('open');
	        }
	    },
	    error: function (SOAPResponse) {
	    	$.mobile.hidePageLoadingMsg();
	    	$('#dlg_aviso_buscar_pedido h1').html('Error');
        	$('#dlg_aviso_buscar_pedido p').html(SOAPResponse);
        	$('#dlg_aviso_buscar_pedido').popup('open');
	    }
	});
}

function accionPedido(idPedido){
	selectedPedido = idPedido; // Se establece al variable global selectedPedido  con el número del pedido seleccionado por el usuario
	var accion = $('#bnAccionPedido').val();
	if(accion=="editar"){
		mostrarPedido("#ver_pedido", "none");
	} else {
		$('#num_pedido').html(selectedPedido);
		$('#confirmar_borrar_pedido').popup('open');
	}
}

// Mostrar el pedido seleccionado
function mostrarPedido(destino, transicion){
	var pedidos = xml.find("return");
	refrescarDetalle();
	$.mobile.changePage(destino, {transition : transicion});
}

// Borrar el pedido seleccionado
function borrarPedido(destino, transicion){
	var serviceURL = 'http://10.0.2.2:8080/Phama/pharmaws';
	$.mobile.showPageLoadingMsg(); 
	$.soap({
	    url: serviceURL,
	    appendMethodToURL: false, 
	    method: 'eliminarPedido',
	    namespaceQualifier: 'ns2',
	    namespaceUrl: 'http://ws.phama.it.eps.upo.org/',
	    params: {
	        idPedido:  selectedPedido
	    },
	    success: function (soapResponse) {
	    	var xmlDoc = $.parseXML(soapResponse);
	        $.mobile.hidePageLoadingMsg();
	        buscar_pedido(destino,transicion);
	    },
	    error: function (SOAPResponse) {
	    	$.mobile.hidePageLoadingMsg();
	    	alert(SOAPResponse);
	    }
	});
}

function refrescarDetalle(){
	/* El contenido XML de la búsqueda se encuentra en la variable global xml, por lo que la misma puede utilzarse
	 * en cualquier momento. Tomamos todos los pedidos devueltos por la consulta y los recorremos, entrando 
	 * únicamente en aquél que corresponde al pedido seleccionado y que viene en el parámetro 
	 */
	var pedidos = xml.find("return");
	
	pedidos.each(function(index,element){
		var idPedidoAux = $(element).find('idPedidoCli').first().text();
		if(selectedPedido==idPedidoAux){	
			var lista = "<ul data-role='listview' data-inset='true'>";
			$("#detallePedido").children().remove();
			$('#ver_pedido').addClass('ui-page');
			
			$('#v_idPedido').html($(element).find('idPedidoCli').first().text());
			$('#v_cliente').html($(element).find('cliente').find('nombre').text());
			var fecha = $(element).find('fecha').text();
			$('#v_fecha').html($.datepicker.formatDate('dd-mm-yy', new Date(fecha)));
			
			var detalles = $(element).find("misDetallesPedCli");			
			var det = '';
			detalles.each(function(indexDetalle, elementDetalle){
				var idDetalle = $(elementDetalle).find('idDetalle').first().text();
				det = "<li><a href='#' onclick='mostrarDetallePedido("+idDetalle+")'>"+ 
				$(elementDetalle).find('producto').find('nombre').last().text() + 
				"</a></li>";
				lista += det;
			});
			lista += "</ul>";

			$('#detallePedido').empty().append(lista).listview().trigger('create');
		}
	});	
}

// Mostrar el detalle seleccionado del pedido seleccionado
function mostrarDetallePedido(idDetalle){
	/* Como el número del pedido seleccionado ya fue almacenado en la variable global selectedPedido en el momento
	 * de la selección del mismo, ahora solo hemos de recibir el número del detalle (artículo) seleccionado.
	 * Nuevamente volvemos a recorrer todo el XML en busca del pedido y detalles seleccionados, construyendo (una
	 * vez encontrado) una ventana en la que se mostrarán todos los datos correspondientes al mismo.
	 */
	var pedidos = xml.find("return");
	
	pedidos.each(function(index,element){
		var idPedidoAux = $(element).find('idPedidoCli').first().text();
		if(selectedPedido==idPedidoAux){		
			var detalles = $(element).find("misDetallesPedCli");	
			var det = '';
			detalles.each(function(indexDetalle, elementDetalle){
				var idDetalleAux = $(elementDetalle).find('idDetalle').text();
				if(idDetalle == idDetalleAux){
					selectedDetalle = idDetalle;
					var nombre = $(this).find('nombre').last().text();
					var descripcion = $(this).find('descripcion').text();
					var precio = $(this).find('precio').text();
					var iva = $(this).find('iva').text();
					var cantidad = $(this).find('cantidad').text();
					var subtotal = precio*cantidad;
					var total = (subtotal*iva/100) + subtotal;
					var msg = "Artículo: <strong>" + nombre + "</strong><br/>Descripcion: <strong>" + descripcion + "</strong><br/>Precio: <strong>" + parseFloat(precio).toFixed(2) + " €</strong><br/>Cantidad: <strong>" + cantidad + "</strong><br/>Iva: <strong>" + iva + "%</strong><br/>Total: <strong>" + parseFloat(total).toFixed(2) + " €</strong>";
					$('#detalle_pedido h1').html('Pedido #' + selectedPedido);
					$('#detalle_pedido p').html(msg);
					$('#detalle_pedido').popup('open');
				}
			});
		}
	});	
}

// Eliminar detalle del pedido seleccionado
function eliminarDetalle(){
	/* Eliminar un detalle consiste simplemente en efectuar una solicitud al webService correspondiente. Una vez se
	 * cumplimentado, se vuelve a efectuar la última búsqueda, cuyo patrón aún se encuentra almacenado en la sección
	 * correspondiente a la misma (gracias a que todas las secciones están en una misma vista html). La búsqueda
	 * se invoca pasando como parámetros la pantalla de destino y el modo de transición. La función buscar_pedido()
	 * se encargará de tratar adecuadamente estos parámetros.
	 */
	var serviceURL = 'http://10.0.2.2:8080/Phama/pharmaws';
	$.mobile.showPageLoadingMsg(); 
	$.soap({
	    url: serviceURL,
	    appendMethodToURL: false, 
	    method: 'eliminarDetallePedido',
	    namespaceQualifier: 'ns2',
	    namespaceUrl: 'http://ws.phama.it.eps.upo.org/',
	    params: {
	        idPedido:  selectedPedido,
	        idDetalle: selectedDetalle
	    },
	    success: function (soapResponse) {
	    	var xmlDoc = $.parseXML(soapResponse);
	        $.mobile.hidePageLoadingMsg();
	        buscar_pedido('#ver_pedido','none');
	    },
	    error: function (SOAPResponse) {
	    	$.mobile.hidePageLoadingMsg();
	    	$('#detalle_pedido h1').html('Error');
        	$('#detalle_pedido p').html(SOAPResponse);
        	$('#detalle_buscar_pedido').popup('open');
	    }
	});
}

// Añadir detalle al pedido
function anadirDetalle(){
	var newProducto = $('#a_idProducto').val();
	var newCantidad = $('#a_cantidad').val(); 
	var serviceURL = 'http://10.0.2.2:8080/Phama/pharmaws';
	$.mobile.showPageLoadingMsg(); 
	console.log('idPedido: ' + selectedPedido + '\nidProducto: ' + newProducto + '\ncantidad: ' + newCantidad);
	$.soap({
	    url: serviceURL,
	    appendMethodToURL: false, 
	    method: 'anadirDetallePedido',
	    namespaceQualifier: 'ns2',
	    namespaceUrl: 'http://ws.phama.it.eps.upo.org/',
	    params: {
	        idPedido:  selectedPedido,
	        idProducto: newProducto,
	        cantidad: newCantidad
	    },
	    success: function (soapResponse) {
	    	var xmlDoc = $.parseXML(soapResponse);
	        $.mobile.hidePageLoadingMsg();
	        $('#a_idProducto').val(0).prop('selected', true);
	        $('#a_idProducto').selectmenu('refresh', true);
	    	$('#a_cantidad').val(1).slider('refresh'); 
	        buscar_pedido('#ver_pedido','none');
	    },
	    error: function (SOAPResponse) {
	    	$.mobile.hidePageLoadingMsg();
	    	$('#detalle_pedido h1').html('Error');
        	$('#detalle_pedido p').html(SOAPResponse);
        	$('#detalle_buscar_pedido').popup('open');
	    }
	});
}

//Crear nuevo pedido
function grabarPedido(){
	var a_idCliente = $('#c_idClientePedido').val();
	var a_idEstado = $('#c_idEstado').val();
	var a_fecha = $('#c_fechaPedido').val();
	var a_observaciones = $('#c_observaciones').val();
	var serviceURL = 'http://10.0.2.2:8080/Phama/pharmaws';
	$.mobile.showPageLoadingMsg(); 

	$.soap({
	    url: serviceURL,
	    appendMethodToURL: false, 
	    method: 'guardarPedido',
	    namespaceQualifier: 'ns2',
	    namespaceUrl: 'http://ws.phama.it.eps.upo.org/',
	    params: {
	        idCliente: a_idCliente,
			idEstado: a_idEstado,
			fecha: a_fecha,
			nota: a_observaciones
	    },
	    success: function (soapResponse) {
	    	var xmlDoc = $.parseXML(soapResponse);	        
	        xmlPedido = $(xmlDoc);
	        selectedPedido = xmlPedido.find("return").text();
	        if(selectedPedido !=""){
	        	$.mobile.hidePageLoadingMsg();
	        	buscar_pedido('#ver_pedido','none');
	        } else {
	        	alert("Se ha producido un error, vuelva a intentarlo.");
	        }
	    },
	    error: function (SOAPResponse) {
	    	$.mobile.hidePageLoadingMsg();
	    	alert(SOAPResponse);
	    }
	});
}
